whisercpp gemのCMake導入
#whispercpp_gem
Btw, it would be better if the Ruby bindings start using CMake to build the ggml/whisper.cpp, instead of replicating the build with Makefiles.
https://github.com/ggml-org/whisper.cpp/pull/2851#pullrequestreview-2649822104
その通り。
その後、gem installがCMakeにも対応していることを教えてもらう:
https://github.com/ggml-org/whisper.cpp/pull/2851#issuecomment-2747864731
https://github.com/houyuanjie/learn_cmake_ruby
よく見たらspec.extensionsには、CMakeLists.txtじゃなくてRakefileを入れているな
whisper.cppはコンパイル時にオプションを渡すことでBLASを使ったりCoreMLを使ったり、挙動を変えられる。これに対応したい。
通常の(?)拡張機能ライブラリーのインストール時には、gem installに--with-cflagsみたいオプションを渡すとそれがコンパイルオプションとして使われる。
mkmf.rbのwith_config関数を使うことでこれに対応している
gem installからmkmf.rbにオプションを渡すのはどうしてる?
mkmf.rbの中で……
RbConfig::MAKEFILE_CONFIGを読んでいる
ENV["CONFIGURE_ARGS"]を読んでいる
ARGVを読んでいる
つまりgem installは特に何もしていない。
とするとCMakeの方で対応している分だけ対応することになる。
又はbuild_argsを設定する
これは可変じゃない
gem installのCMake対応は、CMakeを使ってMakefileを作り、それを使ってmakeでビルドするっぽい
ビルドシステムがmakeじゃない時ビルドできないのでは?
extconf.rb使う時がそもそもmake前提だから、何かが失われるわけじゃないのか
でもgem installコマンドへのオプションをcmake実行時に使いたいから、Rakefileを使うのがいいかなあ
https://cmake.org/pipermail/cmake/2015-May/060543.html
CIでGOMP_parallelと怒られる
シンボルはあるからヘッダーは認識されている
これはCMakeでやってるからだろう
-fopenmpすればよい?
-fopenmp -lgompすればいけた。-fopenmpだけではだめだった
$LDFLAGS << ' -static-libgcc -static-libstdc++'だけは?
だめだった
$LDFLAGS << ' -static-libgcc -static-libstdc++'と$CFLAGSと$CXXFLAGSに-fopenmpするのは?
だめだった
-lgompだけは?
汎用的に書くには?
g++使っているときで且つlibgompがある時、という条件?
プルリクエスト作った: https://github.com/ggml-org/whisper.cpp/pull/3043